package com.astersoft.lib.cypher.crypt;

/*
 * Copyright 2012 AsterSoft personal developer - Licensed under the Apache
 * License, Version 2.0 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */

import java.io.InputStream;
import java.io.OutputStream;

/**
 * Interface that define encryptable behaviour
 * for the ASCrypt aggregation class
 * 
 * @author dario durzo
 * @version 0.1
 * @date 29-05-2012
 */
public interface Encryptable {
	/**
	 * Initialize the cypher algorithm
	 * @param passPhrase
	 * 				the string passphrase
	 */
	public void initCypher(String passPhrase);
	/**
	 * Encrypt an input stream to an output stream
	 * 
	 * @param in
	 * @param out
	 */
	public void encrypt(InputStream in, OutputStream out);
	/**
	 * Decrypt an input stream to an output stream
	 * 
	 * @param in
	 * @param out
	 */
	public void decrypt(InputStream in, OutputStream out);
	/**
	 * Encrypt a string with the cypher algorithm
	 * 
	 * @param input
	 * 			the string to cypher
	 * @return
	 * 			the cypher string
	 */
	public String encrypt(String input);
	/**
	 * Decrypt a string with the cypher algorithm
	 * 
	 * @param input
	 * 			the string to decypher
	 * @return
	 * 			the decypher string
	 */
	public String decrypt(String input);
}
